package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IFormGroupFieldValueDAO;
import org.jsola.hr.dto.FormGroupFieldValueAddDTO;
import org.jsola.hr.dto.FormGroupFieldValueUpdateDTO;
import org.jsola.hr.entity.FormGroupFieldValueDO;
import org.jsola.hr.query.FormGroupFieldValueQuery;
import org.jsola.hr.vo.FormGroupFieldValueListVO;
import org.jsola.hr.vo.FormGroupFieldValueVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 自定义字段存值
 *
 * @author zhr
 */
public interface IFormGroupFieldValueService extends IService<IFormGroupFieldValueDAO, FormGroupFieldValueDO> {

    /**
     * 新增自定义字段存值
     * @param formGroupFieldValueAddDTO 新增自定义字段存值DTO
     * @param tokenUser 当前用户
     * @return 自定义字段存值详情信息
     */
    FormGroupFieldValueVO save(FormGroupFieldValueAddDTO formGroupFieldValueAddDTO, TokenUser tokenUser);

    /**
     * 批量新增自定义字段存值
     * @param formGroupFieldValueAddDTOList 新增自定义字段存值DTO
     * @param tokenUser 当前用户
     * @return 自定义字段存值详情信息
     */
    List<FormGroupFieldValueVO> batchSave(List<FormGroupFieldValueAddDTO> formGroupFieldValueAddDTOList, TokenUser tokenUser);

    /**
     * 修改自定义字段存值
     * @param formGroupFieldValueUpdateDTO 修改自定义字段存值DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(FormGroupFieldValueUpdateDTO formGroupFieldValueUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除自定义字段存值，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param formGroupFieldValueIds 自定义字段存值id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, Long...formGroupFieldValueIds);

    /**
     * 根据自定义字段存值id查找
     * @param formGroupFieldValueId 自定义字段存值id
     * @param siteId 所属站点id
     * @return 自定义字段存值详情信息
     */
    FormGroupFieldValueVO selectById(Long formGroupFieldValueId, String siteId);

    /**
     * 查询自定义字段存值
     * @param formGroupFieldValueQuery 查询条件
     * @param siteId 所属站点id
     * @return 自定义字段存值列表信息
     */
    List<FormGroupFieldValueListVO> select(FormGroupFieldValueQuery formGroupFieldValueQuery, String siteId);

    /**
    * 查询自定义字段存值记录数
    * @param formGroupFieldValueQuery 查询条件
    * @param siteId 所属站点id
    * @return 自定义字段存值记录数
    */
    int selectCount(FormGroupFieldValueQuery formGroupFieldValueQuery, String siteId);

    /**
     * 分页查询自定义字段存值
     * @param formGroupFieldValueQuery 查询条件
     * @param siteId 所属站点id
     * @return 自定义字段存值列表信息
     */
    Page<FormGroupFieldValueListVO> selectPage(FormGroupFieldValueQuery formGroupFieldValueQuery, String siteId);


    /**
     * 根据自定义字段存值id查找
     * @param formGroupFieldValueId 自定义字段存值id
     * @param siteId 所属站点id
     * @return 自定义字段存值
     */
    FormGroupFieldValueDO selectDOById(Long formGroupFieldValueId, String siteId);

    /**
     * 查询自定义字段存值
     * @param formGroupFieldValueQuery 查询条件
     * @param siteId 所属站点id
     * @return 自定义字段存值列表
     */
    List<FormGroupFieldValueDO> selectDO(FormGroupFieldValueQuery formGroupFieldValueQuery, String siteId);

    List<FormGroupFieldValueDO> selectBySubject(String subjectType, List<String> gysIds);

    /**
     * 根据subjectId列表查询
     *
     * @param subjectIdList subjectIdList
     * @param tokenUser     当前用户
     * @return 字段值
     */
    List<FormGroupFieldValueDO> selectBySubjectIdList(List<String> subjectIdList, TokenUser tokenUser);

    /**
     * 查询某个供应商的自定义字段存值
     * @param fieldId
     * @param subjectId
     * @param subjectType
     * @return
     */
    FormGroupFieldValueDO selectByFieldId(Long fieldId, String subjectId, String subjectType);

    /**
     * 查询某个供应商的自定义字段存值
     *
     * @param fieldId 字段Id
     * @param subjectType subjectType
     * @return 值
     */
    List<FormGroupFieldValueDO> findByFieldId(Long fieldId, String subjectType);
}


